const isArray = function(obj: any): boolean {
    return Object.prototype.toString.call(obj) === "[object Array]";
};

const Logger = () => {
};

Logger.typeColor = function(type: string) {
    let color = "";
    switch (type) {
        case "primary":
            color = "#2d8cf0";
            break;
        case "success":
            color = "#19be6b";
            break;
        case "info":
            color = "#909399";
            break;
        case "warn":
            color = "#ff9900";
            break;
        case "error":
            color = "#f03f14";
            break;
        default:
            color = "#35495E";
            break;
    }
    return color;
};

Logger.print = function(type = "default", text: any, back = false) {
    if (typeof text === "object") {
        // 如果是對象則調用打印對象方式
        isArray(text) ? console.table(text) : console.dir(text);
        return;
    }
    if (back) {
        // 如果是打印帶背景圖的
        console.log(
            `%c ${text} `,
            `background:${Logger.typeColor(type)}; padding: 2px; border-radius: 4px; color: #fff;`
        );
    } else {
        console.log(
            `%c ${text} `,
            `border: 1px solid ${Logger.typeColor(type)};
        padding: 2px; border-radius: 4px;
        color: ${Logger.typeColor(type)};`
        );
    }
};

Logger.printBack = function(type = "primary", text) {
    this.print(type, text, true);
};

Logger.pretty = function(type = "primary", title, text) {
    if (typeof text === "object") {
        console.group("Console Group", title);
        console.log(
            `%c ${title}`,
            `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
        padding: 1px; border-radius: 4px; color: #fff;`
        );
        isArray(text) ? console.table(text) : console.dir(text);
        console.groupEnd();
        return;
    }
    console.log(
        `%c ${title} %c ${text} %c`,
        `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
      padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
        `border:1px solid ${Logger.typeColor(type)};
      padding: 1px; border-radius: 0 4px 4px 0; color: ${Logger.typeColor(type)};`,
        "background:transparent"
    );
};

Logger.prettyPrimary = function(title, ...text) {
    text.forEach((t) => this.pretty("primary", title, t));
};

Logger.prettySuccess = function(title, ...text) {
    text.forEach((t) => this.pretty("success", title, t));
};

Logger.prettyWarn = function(title, ...text) {
    text.forEach((t) => this.pretty("warn", title, t));
};

Logger.prettyError = function(title, ...text) {
    text.forEach((t) => this.pretty("error", title, t));
};

Logger.prettyInfo = function(title, ...text) {
    text.forEach((t) => this.pretty("info", title, t));
};

export default Logger;
